﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ASPLanchonete.classes;
using ASPLanchonete.fabrica;
using NHibernate;
using NHibernate.Linq;

namespace ASPLanchonete.controller
{
    public class VendaController : IVendaController
    {
        Fabrica fabrica = new Fabrica();

        public string Salvar(Venda venda, IList<ItemVenda> listaItemVenda)
        {
            return fabrica.SalvaVenda(venda, listaItemVenda);
        }

        public Venda PesquisarPorId(int id)
        {
            ISession sessao = fabrica.sessao();
            Venda venda = sessao.Query<Venda>().Where(a => a.Id == id && a.FechamentoVenda == false && a.IdFuncionario == null)
                .FetchMany(a => a.ItemVenda)
                .ThenFetch(a => a.Produto)
                .FirstOrDefault();
            fabrica.fechaSessao();
            return venda;
        }

        public int CodigoUltimaVenda()
        {
            ISession sessao = fabrica.sessao();
            int idVenda = 0;
            int qtdeItensSalvos = sessao.Query<Venda>().Where(a => a.IdFuncionario == null).Count();
            if (qtdeItensSalvos > 0)
            {
                idVenda = sessao.Query<Venda>().Where(a => a.IdFuncionario == null).Max<Venda>(a => a.Id);
            }
            fabrica.fechaSessao();
            return idVenda;
        }

        public string Exclui(int idVenda)
        {
            return fabrica.ExcluiVenda(idVenda);
        }

        public Venda VendaFuncionarioPesquisarPorId(int id)
        {
            ISession sessao = fabrica.sessao();
            Venda venda = sessao.Query<Venda>().Where(a => a.Id == id && a.FechamentoVenda == false && a.IdFuncionario != null)
                .FetchMany(a => a.ItemVenda)
                .ThenFetch(a => a.Produto)
                .FirstOrDefault();
            fabrica.fechaSessao();
            return venda;
        }

        public int CodigoUltimaVendaFuncionario()
        {
            ISession sessao = fabrica.sessao();
            int idVenda = 0;
            int qtdeItensSalvos = sessao.Query<Venda>().Where(a => a.IdFuncionario != null).Count();
            if (qtdeItensSalvos > 0)
            {
                idVenda = sessao.Query<Venda>().Where(a => a.IdFuncionario != null).Max<Venda>(a => a.Id);
            }
            fabrica.fechaSessao();
            return idVenda;
        }
    }
}